<?php 

/*
 * Una cotizacion se obtiene como resultado de haber consultado el precio de un producto,
 *  y consiste en una lista de precios de una seleccion de servicios relacionados a un producto.
 *
 * @author Carlo Lopez <carlo.xavier.lopez 'at' gmail 'dot' com>
 */
class Cotizacion 
{
  /* El formulario que representa esta cotizacion.
   */
  protected $form; 

  /*
   * El nombre del producto sobre el que se hace la cotizacion.
   */
  protected $nomprod;

  /* Los nombres de los servicios contratados.
   */
  protected $nomservicios;

  /* Las reglas. 
   *
   * array[<Regla.ServicioId>]<Regla>
   */
  protected $reglas;

  /*
   * Construye una nueva cotizacion en base a las reglas 
   *  de consumo de un producto.
   *
   * @arg $nombreprod string        Nombre del producto.
   * @arg $reglasid   array<string> Id's de las reglas.
   * @arg $frec       string        Frecuencia de pago.
   */
  public function __construct($nombreprod, array $reglasid, $frec)
  {
    $this->form = new CotizacionForm($nombreprod,$reglasid,$frec);
    $this->nomprod = $nombreprod;
    $this->reglas = array();
    $q = Doctrine_Query::create()
      ->select('r.*')
      ->from('Regla r')
      ->where('r.id IN ?', array($reglasid));
    $reglas = $q->execute();
    $this->reglas = array();
    $this->nomservicios = array();
    foreach($reglas as $regla)
    {
      if(!isset($this->reglas[$regla->getServicioId()]))
      {
        $this->reglas[$regla->getServicioId()] = array(); 
        array_push($this->nomservicios, $regla->getServicioId());
      }
      array_push($this->reglas[$regla->getServicioId()], $regla);
    }

  }

  public function getForm()
  {
    return $this->form;
  }

  public function getNombreProducto()
  {
    return $this->nomprod;
  }

  /*
   * Devuelve las reglas del servicio '$nomservicio'.
   */
  public function getReglas($nomservicio)
  {
    return $this->reglas[$nomservicio];
  }

  /*
   * Devuelve los nombres de los servicios contemplados en la cotizacion.
   *
   * @return array<string> Nombres de los servicio. 
   */
  public function getNombServicios()
  {
    return $this->nomservicios;
  }

}
